<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>const的使用</title>
</head>
<body>
<script>
  // 注意一:一旦给const修饰的标识符被赋值后,就不能修改
  // 不然会报错Uncaught TypeError: Assignment to constant variable
  /*const name = 'why';
  name = 'wang';*/

  // 注意二:在使用const定义标识符时,必须同时赋值
  // Uncaught SyntaxError: Missing initializer in const declaration
  /*const name;*/

  // 注意三:常量的含义是指向的对象不能修改,但是可以改变对象内部的属性,原因:
  // 因为在js中,我们定义的标识符或者变量本身并不是保存这些参数值,这些参数值保存在一个指定的内存块中,而标识符保存的是这些参数的内存
  // 块的地址,比如:name的值'why'保存在内存地址为 0X100 的内存中(js中字符串也是对象),那么,name中就会保存0X100这个地址,当需要name的值
  // 时,name会通过0X100这个地址找到对应的内存拿到'why'这个值,当给name重新赋值为'wang'时,js会重新开辟一块内存空间把'wang'放进去,假设
  // 这块空间地址为0X200,那么,这时name保存的地址会从0X100更改为0X200,再次调用name时,name根据地址所拿到的值就会是'wang';
  // 而const修饰的标识符不可以改变标识符的内存指向地址,所以const修饰的标识符被赋值后,就不能修改,如果修改就会报错,
  // 但是当标识符指向的对象内存内部的值发生变化,这个时候const修饰的标识符并不会出现异常,因为指向的地址并没有发生改变
  const obj = {
    name: 'why',
    age: 18,
    height: 180
  }

  obj.name = 'wang';
</script>
</body>
</html>
